package org.yhhhhhhh.ai_jianli.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.yhhhhhhh.ai_jianli.model.User;
import org.yhhhhhhh.ai_jianli.util.JwtUtil;

import java.util.HashMap;
import java.util.Map;

/**
 * JWT服务类
 * 提供JWT token的生成、验证和管理功能
 */
@Service
public class JwtService {

    @Autowired
    private JwtUtil jwtUtil;

    @Autowired
    private UserService userService;

    /**
     * 为用户生成JWT token
     * @param user 用户对象
     * @return JWT token字符串
     */
    public String generateToken(User user) {
        Map<String, Object> claims = new HashMap<>();
        
        // 添加用户角色信息
        if (user.getRoles() != null && !user.getRoles().isEmpty()) {
            String role = user.getRoles().iterator().next().getName();
            claims.put("role", role);
        }
        
        // 添加用户ID
        claims.put("userId", user.getId());
        
        // 添加用户邮箱
        claims.put("email", user.getEmail());
        
        return jwtUtil.generateToken(user, claims);
    }

    /**
     * 验证JWT token
     * @param token JWT token
     * @return 验证结果
     */
    public boolean validateToken(String token) {
        return jwtUtil.validateToken(token);
    }

    /**
     * 验证JWT token并获取用户信息
     * @param token JWT token
     * @return 用户对象，如果token无效则返回null
     */
    public User validateTokenAndGetUser(String token) {
        try {
            if (!jwtUtil.validateToken(token)) {
                return null;
            }
            
            String username = jwtUtil.getUsernameFromToken(token);
            return (User) userService.loadUserByUsername(username);
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 从token中获取用户名
     * @param token JWT token
     * @return 用户名
     */
    public String getUsernameFromToken(String token) {
        return jwtUtil.getUsernameFromToken(token);
    }

    /**
     * 从token中获取用户角色
     * @param token JWT token
     * @return 用户角色
     */
    public String getRoleFromToken(String token) {
        return jwtUtil.getRoleFromToken(token);
    }

    /**
     * 刷新JWT token
     * @param token 旧的JWT token
     * @return 新的JWT token
     */
    public String refreshToken(String token) {
        return jwtUtil.refreshToken(token);
    }

    /**
     * 检查token是否过期
     * @param token JWT token
     * @return 是否过期
     */
    public boolean isTokenExpired(String token) {
        try {
            return jwtUtil.getExpirationDateFromToken(token).before(new java.util.Date());
        } catch (Exception e) {
            return true;
        }
    }

    /**
     * 从请求头中提取token
     * @param authHeader Authorization请求头
     * @return JWT token，如果没有找到则返回null
     */
    public String extractTokenFromHeader(String authHeader) {
        if (authHeader != null && authHeader.startsWith("Bearer ")) {
            return authHeader.substring(7);
        }
        return null;
    }
}
